import { RedisOptions } from 'ioredis'
import { LogLevel } from '@nestjs/common'
import { CoreConfigProperty } from '../decorator/core-config-property.decorator'

export class CoreConfig {
  // 服务配置
  @CoreConfigProperty()
  server: {
    // 端口
    port: number
  }

  // 数据库配置
  @CoreConfigProperty()
  database: {
    url: string
  }

  // 日志
  @CoreConfigProperty()
  log: {
    // 级别
    level: LogLevel
  }

  // 上传
  @CoreConfigProperty()
  upload: {
    // 单文件大小，单位：MB
    singleFileSize: number
  }

  // 静态站映射
  @CoreConfigProperty()
  statics: Array<{
    // 名称，可用于检索
    name: string
    // url访问前缀
    urlPrefix: string
    // 存储根目录
    storeRoot: string
  }>

  // axios配置
  @CoreConfigProperty()
  axios: {
    // 超时时间，ms
    timeout: number
  }

  // 缓存
  @CoreConfigProperty()
  cache: {
    // 类型。memory-内存；redis-redis
    type: 'memory' | 'redis'
    // redis配置
    redis: RedisOptions
  }

  /**
   * 搜索静态站配置项
   * @param name
   * @returns
   */
  getStaticItem(name: string) {
    return this.statics?.find(item => item.name === name)
  }
}
